package com.zxy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zxy.mapper.TransferMapper;
import com.zxy.pojo.dto.TransferListQueryDTO;
import com.zxy.pojo.entity.SysUserBusinessStats;
import com.zxy.pojo.vo.PageResponseVO;
import com.zxy.service.TransferService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;

@Service
public class TransferServiceImpl extends ServiceImpl<TransferMapper, SysUserBusinessStats> implements TransferService {
    @Autowired
    public TransferMapper transferMapper;

    // 时间格式器：处理请求中的"yyyy-MM-dd"格式（转成LocalDateTime的00:00:00和23:59:59）
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");


    @Override
    public PageResponseVO<SysUserBusinessStats> getTransferList(TransferListQueryDTO queryDTO) {
        // 1. 构建分页对象（pageNum从1开始，与请求参数一致）
        Page<SysUserBusinessStats> page = new Page<>(queryDTO.getPageNum(), queryDTO.getPageSize());

        // 2. 构建多条件查询器
        QueryWrapper<SysUserBusinessStats> queryWrapper = new QueryWrapper<>();

        // 2.1 筛选条件：用户ID（精确查询，非空才加）
        if (queryDTO.getUserId() != null) {
            queryWrapper.eq("user_id", queryDTO.getUserId());
        }

        // 2.2 筛选条件：用户名（模糊查询，非空才加）
        if (StringUtils.hasText(queryDTO.getUserName())) {
            queryWrapper.like("user_name", queryDTO.getUserName());
        }

        // 2.3 筛选条件：手机号（精确查询，非空才加）
        if (StringUtils.hasText(queryDTO.getPhonenumber())) {
            queryWrapper.eq("phonenumber", queryDTO.getPhonenumber());
        }

        // 2.4 筛选条件：时间范围（createTime between 开始时间00:00:00 和 结束时间23:59:59）
        Map<String, String> params = queryDTO.getParams();
        if (params != null) {
            // 开始时间：yyyy-MM-dd → yyyy-MM-dd 00:00:00
            String beginTimeStr = params.get("beginTime");
            if (StringUtils.hasText(beginTimeStr)) {
                LocalDateTime beginTime = LocalDateTime.parse(
                        beginTimeStr + " 00:00:00",
                        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                );
                queryWrapper.ge("create_time", beginTime); // ≥ 开始时间
            }

            // 结束时间：yyyy-MM-dd → yyyy-MM-dd 23:59:59
            String endTimeStr = params.get("endTime");
            if (StringUtils.hasText(endTimeStr)) {
                LocalDateTime endTime = LocalDateTime.parse(
                        endTimeStr + " 23:59:59",
                        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                );
                queryWrapper.le("create_time", endTime); // ≤ 结束时间
            }
        }

        // 2.5 排序：按createTime降序（最新数据在前，可选，根据需求调整）
        queryWrapper.orderByDesc("create_time");

        // 3. 执行分页查询（MyBatis-Plus自动返回分页结果）
        Page<SysUserBusinessStats> resultPage = baseMapper.selectPage(page, queryWrapper);

        // 4. 封装泛型响应VO
        return PageResponseVO.success(
                resultPage.getTotal(), // 总记录数
                resultPage.getRecords() // 当前页数据列表（TransferUserStats）
        );
    }

}